﻿using Microsoft.VisualStudio.TestTools.UnitTesting;
using Vtron.ATSP.Projector;
using Vtron.ATSP.Tester;
using Vtron.ATSP.DataAccess;
using System.Drawing;
using Vtron.ATSP.DomainObjects;

namespace Vtron.ATSP.BusinessLogic.UnitTest
{
    /// <summary>
    /// 投影机通讯接口测试
    ///     这是 Vtron.ATSP.BusinessLogic.ScreenTestHandler 的测试类，旨在
    ///     包含所有 Vtron.ATSP.BusinessLogic.ScreenTestHandler 单元测试
    /// </summary>
    /// <remarks>
    ///     <创建人>邓穗捷</创建人>
    ///     <创建时间>2014-08-21</创建时间>
    ///     <修订人></修订人>
    ///     <修订时间></修订时间>
    ///     <修订说明></修订说明>
    /// </remarks>
    [TestClass]
    public class ScreenTestHandlerTest
    {
        #region Fields

        private ScreenTestHandler handler;

        #endregion

        #region Initialize

        /// <summary>
        /// 测试类的初始化运行配置
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-25</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [ClassInitialize]
        public static void ClassInitializeTest(TestContext testContext)
        {
        }

        /// <summary>
        /// 测试类运行结束后清理运行配置释放资源
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-25</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [ClassCleanup]
        public static void ClassCleanupTest()
        {
        }

        /// <summary>
        /// 测试方法的初始化运行配置
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-25</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestInitialize]
        public void InitializeTest()
        {
            IProjectorCom IProjectorCom = new MockProjectorComReturnSucess();
            ISerialCom ISerialCom = new MockSerialComReturnSucess();
            IPersistence IPersistence = new MockPersistenceReturnSucess();

            handler = new ScreenTestHandler(IProjectorCom, ISerialCom, IPersistence);
        }

        /// <summary>
        /// 测试方法的初始化运行配置
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-25</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestCleanup]
        public void CleanupTest()
        {
            handler = null;
        }

        #endregion

        /// <summary>
        /// 测试 SetDesktop 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-25</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("模拟测试 SetDesktop 方法")]
        public void TestSetDesktop()
        {
            bool expected = true;

            bool actual = handler.SetDesktop(Color.White);

            Assert.AreEqual(expected, actual);

        }

        /// <summary>
        /// 测试 SetADC 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-26</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("模拟测试 SetADC 方法")]
        public void TestSetADC()
        {
            bool expected = true;

            Range range = new Range();
            bool actual = handler.SetADC(range, Color.White);

            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        /// 测试 GetSensor 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-26</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("模拟测试 GetSensor 方法")]
        public void TestGetSensor()
        {
            ushort expected = 0;

            ushort actual = handler.GetSensor(0);

            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        /// 测试 Adjust 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-26</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("模拟测试 Adjust 方法")]
        public void TestAdjust()
        {
            CalibrationInstrumentBrightness brightness = new CalibrationInstrumentBrightness();
            brightness.White = 100;
            brightness.Red = 80;
            brightness.Green = 60;
            brightness.Blue = 40;
            brightness.Black = 1;

            //TODO:
            //handler.Adjust(brightness);
        }
    }
}
